﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Controllers;
using Microsoft.Win32;
using Interfaces;


namespace Projekt3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window

        //Store procedures kodning er lavet af Hung Tran Viet Dinh, Anders Madsen og Morten Støchkel
        //GUI design lavet af Peter Jørgensen
    {
        FacadeController controller = new FacadeController();

        List<ICategory> categoryList;
        List<IProduct> productList;
        List<IBrand> brandList;
        List<IProductDetail> productdetailList;

        public MainWindow()
        {
            InitializeComponent();
            //loadProductDetails();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            int tempint = 0;
            if (int.TryParse(tB_ID_cat.Text,out tempint))
            {
                //videre
            }
            else
            {
                MessageBox.Show("CategoriID skal være et tal");
                return;
            }

            controller = new FacadeController();
            try
            {
                controller.Data_to_Category(tB_level_cat.Text,
                                            tB_Name_cat.Text,
                                            tB_discrip_cat.Text,
                                            tB_brandcode.Text,
                                            tB_ID_cat.Text);

                MessageBox.Show("data'en er blevet importeret til databasen");
            }
            catch
            {
                MessageBox.Show("data'en blev ikke importeret til databasen");
            }
        }

        //Alle knapper der har noget at gøre med addnew sender en besked til controlleren med bestemte parametre.
        //De parametre bestemmer så hvilken data der bliver indsættet/opdateret i databasen.
        private void btn_addnew_brand_Click(object sender, RoutedEventArgs e)
        {
            controller = new FacadeController();

            try
            {
                controller.Data_To_Brand(tB_brandcode_brand.Text, tB_brandname_brand.Text);

                MessageBox.Show("data'en er blevet importeret til databasen");
            }
            catch
            {
                MessageBox.Show("data'en blev ikke importeret til databasen");
            }
        }

        private void btn_addnew_product_Click(object sender, RoutedEventArgs e)
        {
            decimal tryparse_price;
            if (decimal.TryParse(tBprice_Product.Text, out tryparse_price))
            {
                //tryparse_prize = decimal.Parse(tBprize_Product.Text);
            }
            else { MessageBox.Show("feltet price, skal være et tal"); }

            try
            {
                controller = new FacadeController();
                controller.Data_To_Product(tB_productnr_product.Text,
                tB_bracode_product.Text,
                tB_availability_product.Text,
                textBox4.Text,
                tBproductstatus_product.Text,
                tryparse_price,
                datePickerLaunchDate.DisplayDate
                );


                controller = new FacadeController();
                controller.Data_to_ProductDetail(tb_language.Text,
                                                 tb_Description.Text,
                                                 tb_replacementsNotes.Text,
                                                 tB_productnr_product.Text);

                MessageBox.Show("data'en er blevet importeret til databasen");
            }
            catch
            {
                MessageBox.Show("data'en blev ikke importeret til databasen");
            }
        }

        //Import funktionerne kalder til xml parseren hvor filvejen kommer med.
        private void btn_Import_Brand_XML_Click(object sender, RoutedEventArgs e)
        {
            string fileName = "";

            OpenFileDialog openFile = new OpenFileDialog();
            openFile.DefaultExt = ".xml";
            openFile.Filter = "XML | *.xml";
            Nullable<bool> result = openFile.ShowDialog();

            if (result == true)
            {
                fileName = openFile.FileName;
            }
            else
            {
                return;
            }
            try
            {
                controller.ImportBrandDataFromERP(fileName);
                MessageBox.Show("data'en er blevet importeret til databasen");
            }
            catch
            {
                MessageBox.Show("data'en blev ikke importeret til databasen");
            }
        }

        private void btn_Import_Category_XML_Click(object sender, RoutedEventArgs e)
        {
            string fileName = "";

            OpenFileDialog openFile = new OpenFileDialog();
            openFile.DefaultExt = ".xml";
            openFile.Filter = "XML | *.xml";
            Nullable<bool> result = openFile.ShowDialog();

            if (result == true)
            {
                fileName = openFile.FileName;
            }
            else 
            {
                return;
            }

            try
            {
                controller.ImportCatageoryDataFromERP(fileName);

                MessageBox.Show("data'en er blevet importeret til databasen");
            }
            catch
            {
                MessageBox.Show("data'en blev ikke importeret til databasen");
            }
        }

        private void btn_Import_Product_XML_Click(object sender, RoutedEventArgs e)
        {
            string fileName = "";

            OpenFileDialog openFile = new OpenFileDialog();
                           openFile.DefaultExt = ".xml";
                           openFile.Filter = "XML | *.xml";
            Nullable<bool> result = openFile.ShowDialog();

            if (result == true)
            {
                fileName = openFile.FileName;
            }
            else
            {
                return;
            }

            try
            {
                controller.ImportProducktDataFromERP(fileName);
                controller.ImportProductDetailsFromERP(fileName);
                MessageBox.Show("data'en er blevet importeret til databasen");
            }
            catch
            {
                MessageBox.Show("data'en blev ikke importeret til databasen");
            }
            

        }

        //Der bliver kastet et brandcode til controlleren som så returnerer alle de
        //Categories der matcher.
        private void btn_brand_søg_Click(object sender, RoutedEventArgs e)
        {
            lb_category_brand_search.Items.Clear();
            lb_product_brand_search.Items.Clear();
            string brandcodeval = tb_brandcode_search.Text;

            categoryList = controller.ReturnerCategoryFromBrand(brandcodeval);
            
            foreach(ICategory category in categoryList)
            {
                lb_category_brand_search.Items.Add(category.Name);
            }
        }

        //Her ændres produkt listen når ens valg bliver ændret i kategorilisten.
        private void lb_category_brand_search_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            lb_product_brand_search.Items.Clear();
            int index = lb_category_brand_search.SelectedIndex;
            
            if (index != -1)
            {
                int categoryidval = categoryList[index].ID;
                productList = controller.ReturnerProductFromCategory(categoryidval);
                foreach (IProduct product in productList)
                {
                    lb_product_brand_search.Items.Add(product.ProductNumber);
                }
            }
        }

        private void btn_load_brands_Click(object sender, RoutedEventArgs e)
        {
            dg_brand.ItemsSource = controller.RetunerBrands();
        }

        private void lb_brand_product_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            int index = lb_product_brand_search.SelectedIndex;
            ProduktData produktvindue = new ProduktData(productList, index, controller);
            produktvindue.ShowDialog();
        }


        private void btn_load_category_Click(object sender, RoutedEventArgs e)
        {
            dg_category.ItemsSource = controller.RetunerCategories();
        }

        private void btn_load_product_Click(object sender, RoutedEventArgs e)
        {
            dg_product.ItemsSource = controller.RetunerProducts();
        }

        private void loadProductDetails()
        {
            productdetailList = controller.RetunerProductDetails();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
        }
    }
}
